Homomorphic Mapped Type
{ [K in keyof T1]: T2 }
({ [K in T]: T2 }ではなく)
T1のmodifier (e.g. readonly, ?)を引き継ぐ
T1が配列のときは、結果も配列になる
↑これマジでヤバすぎ仕様だと思うmrsekut.icon
初見だと絶対に理解できない
謎な挙動をしていることには気付くが、どの記法がトリガーになっているのかわからない
利便性のために一貫性を捻じ曲げたデザインになってる
例
keyof Tという形が大事なので、(keyof T)にすると結果が変わる
code:ts
type R = { readonly foo: number; bar?: string };
// { readonly foo: boolean; bar?: boolean | undefined };
// { foo: boolean; bar: boolean };
制約型が keyof M の形で、かつ 修飾子型 M が型変数のときはHomomorphic Mapped Typesと呼ばれ、さらに特別な動作をします。 ref わかりやすい